package com.example.leetcode.prcatice;

import com.example.leetcode.trainingcamp.week8.thursday.Test78;

import java.util.ArrayList;
import java.util.List;

/**
 * 给定一个字符串 s ，通过将字符串 s 中的每个字母转变大小写，我们可以获得一个新的字符串。
 *
 * 返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。
 */
public class Test784 {

    private List<String> list = new ArrayList<>();

    public List<String> letterCasePermutation(String s) {
        StringBuilder sb = new StringBuilder();
        huisu(s,0,sb);
        return list;
    }


    private void huisu(String s, int index, StringBuilder sb) {
        if (index >= s.length()) {
            list.add(sb.toString());
            return;
        }
        char c = s.charAt(index);
        if (c - '0' >=0 && c - '0' <=9) {
            sb.append(c);
            huisu(s,index + 1,sb);
        } else {
            sb.append(c);
            huisu(s,index + 1,sb);
            boolean lowerCase = Character.isLowerCase(c);
            if (lowerCase) {
                char i = (char) ( c - 32);
                sb.delete(index,sb.length());
                sb.append(i);
                huisu(s,index +1,sb);
            } else {
                char i = (char) ( c + 32);
                sb.delete(index,sb.length());
                sb.append(i);
                huisu(s,index +1,sb);
            }
        }
    }

    public static void main(String[] args) {
        Test784 t = new Test784();
        String s = "a1b2";
        System.out.println(t.letterCasePermutation(s));
    }
}
